# 元组 存在序列 有序
# 不可变序列 有序的
# 无法实现添加、修改、删除操作
# 支持访问元素不支持修改元素
# 访问和处理元素速度快
# 可以作为字段键值

# 使用小括号创建元组
tuple1 = (1, 2, 3, 4, 5)
print(tuple1)
tu1 = ('hello', 'world', 'Ma', 'di', 'di', [1, 2, 3, 4, 5])
print(tu1)

# 使用内置函数创建元组
tuple2 = tuple('hello world')
print(tuple2)

tuple3 = tuple([1, 2, 3, 4, 5])
print(tuple3)

# 可以使用 in
print(len(tuple3))
print('10 在tuple3中存在不', 10 in tuple3)
print('5 在tuple3中存在不', 5 in tuple3)
# 函数使用
print(max(tuple3))
print(min(tuple3))
print(tuple3.index(3))
# reverse 为true降序
print(sorted(tuple3, reverse=True))

# 如果元组中只存在一个值
t = (10)
print(t, type(t))

# 如果元组中只有一个元素，逗号不能省
t = (10,)
print(t, type(t))

# 元组的删除（删除了就不能使用了，否则会报错）
del tuple3
# print(tuple3)

# 元组的便利
tuple4 = ('python', 'java', 'golang', 'javascript')
# tuple4[1] = 'vueJs' 不可变体现
print('tuple4')
print(tuple4[1])
# 元组切片操作
print("元组切片操作")
tupleO = tuple4[0:3:2]
print(tupleO)
# 便利
for data in tuple4:
    print(data)

for index, data in enumerate(tuple4, start=2):
    print(index, data)

print('-' * len(tuple4))
for index in range(len(tuple4)):
    print(index, tuple4[index])

# 元组的生成式
t = (index for index in range(len(tuple4)))
t1 = (1, 2,)
print(t)
t = tuple(t)
print(type(t1))
print(type(t))
# 使用 __next__便利
to = (index for index in range(0, 5))
print(to, type(to))
print(to.__next__())
print(to.__next__())
print(to.__next__())
print(to.__next__())
print(to)

tw = tuple(to)
print(tw, type(tw))

# 定义两个元组
tuple1 = ('python', 'java', 'golang', 'javascript')
tuple2 = (1, 2, 3, 4, 5)
tupleVal = zip(tuple1, tuple2)
print(tupleVal)
tupleValItem = tuple(tupleVal)
print(tupleValItem)
print(len(tupleValItem))
for data in tupleValItem:
    print(data)
    for val in data:
        print(val)
